package com.six.backend.service;

import com.six.backend.pojo.LoginLog;
import com.six.backend.pojo.User;

import java.util.List;
import java.util.Map;

/**
 * @author skyler
 */
public interface UserService {
    /**
     * 查询登录日志信息
     * @param map 存储了用户的账号信息
     * @return 返回用户的登录信息
     */
    List<LoginLog> selectLoginLog(Map map);

    /**
     * 查询用户的信息
     * @param user 输入的用户信息，包括账号和密码
     * @return 用户的全部信息
     */
    User selectUserByAccount(User user);

    /**
     * 通过account查询用户的全部信息
     * @param account 用户的账号
     * @return 用户的全部信息
     */
    User selectUserBYId(String account);

    /**
     * 查询用户所拥有的菜单权限
     * @param account 用户的账号
     * @return 用户的菜单权限信息
     */
    List<Map<String, Object>> getMenuList(String account);

    /**
     * 查询全部用户信息
     * @return User
     */
    List<User> selectAllUsers();

    /**
     * 修改用户信息
     * @param map {
     *            account: 用户账号,
     *            name: 用户姓名,
     *            password: 用户密码,
     *            status: 用户状态,
     *            createTime: 创建时间,
     *            phone: 手机号码,
     *            email: 邮箱,
     *            roleName: 角色名称
     * }
     * @return Boolean
     */
    Boolean insertUser(Map map);

    /**
     * 判断用户是否存在
     * @param account 用户账号
     * @return Boolean
     */
    Boolean isExist(String account);

    /**
     * 为用户设置角色
     * @param map {String account 用户账号,List<String> roleName 角色名称}
     * @return Integer
     */
    Integer insertUserRole(Map map);

    /**
     * 模糊查询用户
     * @param map
     * @return List
     */
    List<User> selectUser(Map map);

    /**
     * 删除用户
     * @param account 用户账号
     * @return
     */
    Boolean deleteUser(String account);

    /**
     * 删除用户角色关系
     * @param account 用户账号
     * @return Boolean 是否删除成功
     */
    Boolean deleteUserRole(String account);

    /**
     * 存储登录日志
     * @param account 用户账号
     * @param ipAddr ip地址
     * @param format 当前时间
     */
    void insertLoginLog(String account, String ipAddr, String format);
    /**
     * 编辑用户
     * @param map
     * @return Boolean
     */
    Boolean updateUser(Map map);

    /**
     * 判断用户是否拥有角色
     * @param account 用户账号
     * @return Boolean
     */
    Boolean isExistUserRole(String account);

    /**
     * 查询用户所属角色
     * @param account
     * @return
     */
    String selectUserRole(String account);

    /**
     * 改变用户状态
     * @param user {account: 账号,status: 改变的状态}
     * @return Boolean
     */
    Boolean updateStatus(User user);

    /**
     * 修改密码
     * @param map {account: 账号, password: 密码}
     * @return
     */
    Boolean updatePassword(Map map);


}
